#!/bin/bash

#
# Define la expresion regular para fechas validas.
#
expresionRegularFecha="([0-9]{4})([-/])([0-9]{1,2})\2([0-9]{1,2})"

#
# Funcion que compara dos fechas validas en formato dd/mm/yyyy
# y verifica que la primer fecha es menor que la segunda.
#
# @param primer_fecha - La primer fecha valida a comparar.
# @param segunda_fecha - La segunda fecha valida a comparar.
#
# @return -- Retorna:
#            0 Si la primer fecha es menor que la segunda fecha
#            1 Si la primer fecha es igual que la segunda fecha
#            2 Si la primer fecha es mayor que la segunda fecha
#
function comparar_fechas()
{
	#
	# Obtengo la primer fecha a comparar
	#
	local primerFecha=$1

	#
	# Obtengo la segunda fecha a comparar
	#
	local segundaFecha=$2

	if [ -z "$primerFecha" -a -z "$segundaFecha" ]
	then
		return 1;
	fi;

	if [ -z "$primerFecha" -a -n "$segundaFecha" ]
	then
		return 0;
	fi;

	if [ -n "$primerFecha" -a -z "$segundaFecha" ]
	then
		return 2;
	fi;

	#
	# Parseo la primer fecha a comparar
	#
	if [[ $primerFecha =~ $expresionRegularFecha ]]
	then
		#
		# Obtengo dia de primer fecha a comparar
		#
		local diaPrimerFecha=${BASH_REMATCH[4]}

		#
		# Obtengo mes de primer fecha a comparar
		#
		local mesPrimerFecha=${BASH_REMATCH[3]}

		#
		# Obtengo anio de primer fecha a comparar
		#
		local anioPrimerFecha=${BASH_REMATCH[1]}
	fi;

	#
	# Parseo la segunda fecha a comparar
	#
	if [[ $segundaFecha =~ $expresionRegularFecha ]]
	then
		#
		# Obtengo dia de segunda fecha a comparar
		#
		local diaSegundaFecha=${BASH_REMATCH[4]}

		#
		# Obtengo mes de segunda fecha a comparar
		#
		local mesSegundaFecha=${BASH_REMATCH[3]}

		#
		# Obtengo anio de segunda fecha a comparar
		#
		local anioSegundaFecha=${BASH_REMATCH[1]}
	fi;

	#
	# Verifico anio de ambas fechas
	#
	if [ $anioPrimerFecha -lt $anioSegundaFecha ]
	then
		#
		# Primer fecha es menor que segunda fecha
		#
		return 0
	elif [ $anioPrimerFecha -eq $anioSegundaFecha ]
	then
		#
		# Verifico mes de ambas fechas
		#
		if [ $mesPrimerFecha -lt $mesSegundaFecha ]
		then
			#
			# Primer fecha es menor que segunda fecha
			#
			return 0
		elif [ $mesPrimerFecha -eq $mesSegundaFecha ]
		then
			#
			# Verifico dia de ambas fechas
			#
			if [ $diaPrimerFecha -lt $diaSegundaFecha ]
			then
				#
				# Primer fecha es menor que segunda fecha
				#
				return 0
			elif [ $diaPrimerFecha -eq $diaSegundaFecha ]
			then
				#
				# Primer fecha es igual que segunda fecha
				#
				return 1
			else
				#
				# Primer fecha es mayor que segunda fecha
				#
				return 2
			fi;
		else
			#
			# Primer fecha es mayor que segunda fecha
			#
			return 2
		fi;
	else
		#
		# Primer fecha es mayor que segunda fecha
		#
		return 2
	fi;
}

#
# Verifico que recibo 2 parametros obligatorios:
# 1) PRIMER_FECHA
# 2) SEGUNDA_FECHA
#
if [ $# -ne 2 ]
then
	. gralog.sh "COMPARAR_FECHAS" "Error#4: Cantidad invalida de argumentos" "F"
	return 4
fi;

#
# Obtengo primer parametro obligatorio
# 1) PRIMER_FECHA
#
primerFecha=$1

#
# Obtengo segundo parametro obligatorio
# 2) SEGUNDA_FECHA
#
segundaFecha=$2

#
# Invoco la funcion comparar fechas
#
comparar_fechas "$primerFecha" "$segundaFecha"

#
# Devuelvo el resultado de la funcion comparar fechas
#
return $?

